From ccdce87dd1118b2d503e9a20cc52b8d1daea55f1 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Mon, 9 Apr 2012 11:00:08 +0300 Subject: [PATCH] Fix bug #11094 with cursor display on display string after invisible text. src/xdisp.c (set_cursor_from_row): If the display string appears in the buffer at position that is closer to point than the position after the display string, display the cursor on the first glyph of the display string. Fixes cursor display when a 'display' text property immediately follows invisible text. --- src/ChangeLog | 8 ++++++++ src/xdisp.c | 16 ++++++++++------ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index e2972223cf5..b71430d0628 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2012-04-09 Eli Zaretskii + + * xdisp.c (set_cursor_from_row): If the display string appears in + the buffer at position that is closer to point than the position + after the display string, display the cursor on the first glyph of + the display string. Fixes cursor display when a 'display' text + property immediately follows invisible text. (Bug#11094) + 2012-04-09 Paul Eggert composite.c: use 'double' consistently diff --git a/src/xdisp.c b/src/xdisp.c index dcd14a1792a..7fb3f8035df 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -14042,15 +14042,18 @@ set_cursor_from_row (struct window *w, struct glyph_row *row, || pos <= tem) { /* If the string from which this glyph came is - found in the buffer at point, then we've - found the glyph we've been looking for. If - it comes from an overlay (tem == 0), and it - has the `cursor' property on one of its + found in the buffer at point, or at position + that is closer to point than pos_after, then + we've found the glyph we've been looking for. + If it comes from an overlay (tem == 0), and + it has the `cursor' property on one of its glyphs, record that glyph as a candidate for displaying the cursor. (As in the unidirectional version, we will display the cursor on the last candidate we find.) */ - if (tem == 0 || tem == pt_old) + if (tem == 0 + || tem == pt_old + || (tem - pt_old > 0 && tem < pos_after)) { /* The glyphs from this string could have been reordered. Find the one with the @@ -14088,7 +14091,8 @@ set_cursor_from_row (struct window *w, struct glyph_row *row, } } - if (tem == pt_old) + if (tem == pt_old + || (tem - pt_old > 0 && tem < pos_after)) goto compute_x; } if (tem) -- 2.30.2